#include "crivo.h"

//Aplica o Crivo de Eratostenes para verificar se um numero inteiro é primo ou não
int crivo(int size, int sum) {

  int i,j;
  char *sieve = calloc(size, 1); // Aloca espaço para o crivo de acordo com o size passado na função

  //Aplica crivo, acha todos os numeros primos até o size passado
  for(i=2; i*i <= size; i++)
    if(!sieve[i])
      for(j = i+i; j < size; j+=i)
        sieve[j] = 1;

  //Verifica a partir de todos os primos achados se o numero inteiro correspondente ao array se encontra neles (sum)
  for(i=2; i<size; i++) {
    if(!sieve[i]){
      if(i==sum){
        free(sieve);
        return 1;
      }
    }
  }

  //Retorna 0 se sum não for primo
  free(sieve);
  return 0;
}

int prime_word(char *str){

  int i, sum = 0;

  //Calcula o equivalente inteiro ao array str, somando caracter por caracter e adicionando em sum
  for(i=0; str[i] != '\0' ;i++)
    sum += (int)str[i];

  //Chama crivo com numero maximo de 10000 (sum nunca será maior que 10000)
  return crivo(10000, sum);

}
